﻿/*
 Fonction de chat en MultiPlayer © Pumpkin
 -----------------------------------------

 Pour accéder aux fonctions, appel au début du script par :
 call compile preprocessFileLineNumbers "lib\Fonctions_Speach.sqf";

 Ne pas oublier d'initialiser l'objet "broadcaster" permettant de diffuser en MP le texte des chats, par ex. la ligne dans init.sqf :
 nul = execVM "lib\Init_Speach_Broadcast.sqf";

 REMARQUES :
 -----------
 - Toutes les fonctions "chat" ont comme synopsis [emetteur_du_message, message] call PUMPKIN...chat.
 - [west,""HQ""] est un emetteur "spécial" ne fonctionnant que pour le "sidechat"
   (se référer à la commande sidechat elle-même, sur le wiki par ex.)
 - le "PUMPKINhint" a comme synopsis [message_1, message_2,...,message_n]. Chaque élément sera affiché sur une nouvelle ligne.
   Ce "hint" accepte les messages dits "structurés" (image,chgt couleur,...)

*/


// GLOBALCHAT : vu par tout le monde
// exemple: [civil1,"Salut à tous !"] call PUMPKINGlobalChat;
PUMPKINGlobalChat = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	//_MPInit = format ["%1 globalchat ""%2""",(_this select 0),(_this select 1)];
	_MPInit = format ["%1 globalchat ""%2""",(_this select 0),(_this select 1)];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};

// SIDECHAT : message réservé à tous les alliés (même camp)
// exemple: [[west,""HQ""],"Retour à la base !"] call PUMPKINSideChat;
PUMPKINSideChat = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	_MPInit = format ["%1 sidechat ""%2""",(_this select 0),(_this select 1)];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};

// GROUPCHAT : message réservé aux membres du groupe
// exemple: ["player","retour en formation !"] call PUMPKINGroupChat;
PUMPKINGroupChat = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	_MPInit = format ["%1 groupchat ""%2""",(_this select 0),(_this select 1)];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};

// COMMANDCHAT : message réservé au leader de groupe
// exemple: ["player","Tourner à droite !"] call PUMPKINCommandChat;
PUMPKINCommandChat = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	_MPInit = format ["%1 commandchat ""%2""",(_this select 0),(_this select 1)];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};

// HINT
// exemple: ["ceci est la 1ère ligne de message","2ème ligne : Ordre à tous de ne pas tirer !"] call PUMPKINhint;
PUMPKINhint = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	_msg_table = _this;
	_MPInit = "hint composeText [";
	for [{_i = 0},{_i < count _msg_table},{_i = _i + 1}] do {
		_MPInit = _MPInit + format ["parseText(""%1"")",_msg_table select _i];
		if (_i != (count _msg_table) -1) then {_MPInit = _MPInit + ",lineBreak,"};
	};
	_MPInit = _MPInit + "]";
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};

// SAY3D
// exemple: ["shellwhiz", _coordonnees (,duree_du_son_optionnel)] call PUMPKINsay3D;
PUMPKINsay3D = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	_sound = _this select 0;
	_coords = _this select 1;
	_delai = 60;
	if (count _this > 2) then { _delai = _this select 2 };

	_rnd = floor (random 10000);

	_MPInit = format ["son%1 = ""HeliHEmpty"" createVehicleLocal %2; son%1 say3d ""%3"";",_rnd,_coords,_sound];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;

	sleep _delai;

	_MPInit = format ["deletevehicle son%1; son%1 = nil",_rnd];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};

// TITLETEXT
// exemple: ["message prioritaire !" (,type)] call PUMPKINtitletext;
PUMPKINtitletext = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	_type = "PLAIN";
	if (count _this > 1) then { _type = _this select 1 };

	_MPInit = format ["titleText [""%1"", ""%2""]",(_this select 0),_type];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};

// CUTTEXT
// exemple: ["message prioritaire !" (,type,delai)] call PUMPKINcuttext;
PUMPKINcuttext = {
	if (isnil "PUMPKINBroadcaster") then {hintc "PUMPKINBroadcaster absent : vérifier l'initialisation"};
	_type = "PLAIN";
	_delai = 5;
	if (count _this > 1) then { _type = _this select 1 };
	if (count _this > 2) then { _delai = _this select 2 };

	_MPInit = format ["cutText [""%1"", ""%2"", %3]",(_this select 0),_type,_delai];
	PUMPKINBroadcaster SetVehicleInit _MPInit;
	ProcessInitCommands;
};
